From 34e4604cf560446993fda8c6dd7ed21c5f1026d5 Mon Sep 17 00:00:00 2001 From: "kaf24@scramble.cl.cam.ac.uk" Date: Fri, 4 Feb 2005 15:27:09 +0000 Subject: [PATCH] bitkeeper revision 1.1159.212.86 (4203944ddTnTLXj6fYycRHIqY8hdCQ) Fix 64-bit domain builder to correctly determine required number of page-table pages to build DOM0 image. Signed-off-by: keir.fraser@cl.cam.ac.uk --- xen/arch/x86/x86_64/domain_build.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/xen/arch/x86/x86_64/domain_build.c b/xen/arch/x86/x86_64/domain_build.c index e660c74185..6b3ec1e86c 100644 --- a/xen/arch/x86/x86_64/domain_build.c +++ b/xen/arch/x86/x86_64/domain_build.c @@ -130,15 +130,13 @@ int construct_dom0(struct domain *d, v_end = (vstack_end + (1UL<<22)-1) & ~((1UL<<22)-1); if ( (v_end - vstack_end) < (512UL << 10) ) v_end += 1UL << 22; /* Add extra 4MB to get >= 512kB padding. */ -#define RD(_p,_s) ((_p) >> (_s)) /* round up */ -#define RU(_p,_s) (((_p) + ((1UL<<(_s))-1)) >> (_s)) /* round down */ +#define NR(_l,_h,_s) \ + (((((_h) + ((1UL<<(_s))-1)) & ~((1UL<<(_s))-1)) - \ + ((_l) & ~((1UL<<(_s))-1))) >> (_s)) if ( (1 + /* # L4 */ - (RU(v_end, L4_PAGETABLE_SHIFT) - - RD(dsi.v_start, L4_PAGETABLE_SHIFT)) + /* # L3 */ - (RU(v_end, L3_PAGETABLE_SHIFT) - - RD(dsi.v_start, L3_PAGETABLE_SHIFT)) + /* # L2 */ - (RU(v_end, L2_PAGETABLE_SHIFT) - - RD(dsi.v_start, L2_PAGETABLE_SHIFT))) /* # L1 */ + NR(dsi.v_start, v_end, L4_PAGETABLE_SHIFT) + /* # L3 */ + NR(dsi.v_start, v_end, L3_PAGETABLE_SHIFT) + /* # L2 */ + NR(dsi.v_start, v_end, L2_PAGETABLE_SHIFT)) /* # L1 */ <= nr_pt_pages ) break; } -- 2.30.2